From e91cb0ab6f2a5c8939aa24235003cc40cb6797e0 Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Thu, 27 Jul 2006 13:52:02 +0100 Subject: [PATCH] [NET] back: Replace netif->active with netif_carrier_ok The connection status to the frontend can be represented using netif_carrier_ok instead of netif->active. As a result, we delay the construction of the dev qdisc until the carrier comes on. This is a prerequisite for adding a tx queue. Signed-off-by: Herbert Xu --- linux-2.6-xen-sparse/drivers/xen/netback/common.h | 2 +- linux-2.6-xen-sparse/drivers/xen/netback/interface.c | 8 ++++---- linux-2.6-xen-sparse/drivers/xen/netback/netback.c | 5 +++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/linux-2.6-xen-sparse/drivers/xen/netback/common.h b/linux-2.6-xen-sparse/drivers/xen/netback/common.h index c52aaa5f6c..dd0b7dd820 100644 --- a/linux-2.6-xen-sparse/drivers/xen/netback/common.h +++ b/linux-2.6-xen-sparse/drivers/xen/netback/common.h @@ -87,7 +87,7 @@ typedef struct netif_st { /* Miscellaneous private stuff. */ enum { DISCONNECTED, DISCONNECTING, CONNECTED } status; - int active; + struct list_head list; /* scheduling list */ atomic_t refcnt; struct net_device *dev; diff --git a/linux-2.6-xen-sparse/drivers/xen/netback/interface.c b/linux-2.6-xen-sparse/drivers/xen/netback/interface.c index f52e2601b7..14ded171f7 100644 --- a/linux-2.6-xen-sparse/drivers/xen/netback/interface.c +++ b/linux-2.6-xen-sparse/drivers/xen/netback/interface.c @@ -37,9 +37,7 @@ static void __netif_up(netif_t *netif) { struct net_device *dev = netif->dev; - netif_tx_lock_bh(dev); - netif->active = 1; - netif_tx_unlock_bh(dev); + netif_carrier_on(dev); enable_irq(netif->irq); netif_schedule_work(netif); } @@ -49,7 +47,7 @@ static void __netif_down(netif_t *netif) struct net_device *dev = netif->dev; disable_irq(netif->irq); netif_tx_lock_bh(dev); - netif->active = 0; + netif_carrier_off(dev); netif_tx_unlock_bh(dev); netif_deschedule_work(netif); } @@ -93,6 +91,8 @@ netif_t *netif_alloc(domid_t domid, unsigned int handle, u8 be_mac[ETH_ALEN]) return ERR_PTR(-ENOMEM); } + netif_carrier_off(dev); + netif = netdev_priv(dev); memset(netif, 0, sizeof(*netif)); netif->domid = domid; diff --git a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c index 6795bcd3af..76a32519ef 100644 --- a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c +++ b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c @@ -143,7 +143,7 @@ int netif_be_start_xmit(struct sk_buff *skb, struct net_device *dev) BUG_ON(skb->dev != dev); /* Drop the packet if the target domain has no receive buffers. */ - if (!netif->active || + if (unlikely(!netif_carrier_ok(dev)) || (netif->rx_req_cons_peek == netif->rx.sring->req_prod) || ((netif->rx_req_cons_peek - netif->rx.rsp_prod_pvt) == NET_RX_RING_SIZE)) @@ -404,7 +404,8 @@ static void add_to_net_schedule_list_tail(netif_t *netif) return; spin_lock_irq(&net_schedule_list_lock); - if (!__on_net_schedule_list(netif) && netif->active) { + if (!__on_net_schedule_list(netif) && + likely(netif_carrier_ok(netif->dev))) { list_add_tail(&netif->list, &net_schedule_list); netif_get(netif); } -- 2.30.2